#include "DeveloperModeDialog.h"
#include "ui_DeveloperModeDialog.h"

DeveloperModeDialog::DeveloperModeDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::DeveloperModeDialog)
{
    ui->setupUi(this);
    // 设置无边框窗口
    setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);

    // 初始化标题栏指针，指向UI中定义的标题栏
    titleBar = ui->titleBar;
    titleLabel = ui->titleLabel;
    closeButton = ui->closeButton;

    //启用鼠标跟踪以处理拖动事件
    titleBar->setMouseTracking(true);
    setMouseTracking(true);
    
    // 设置确定按钮为默认按钮，按回车键时触发
    ui->OkpushButton->setDefault(true);
    
    // 连接lineEdit的returnPressed信号到确定按钮的clicked信号，确保在编辑时按回车键也能触发确定
    connect(ui->lineEdit, &QLineEdit::returnPressed, ui->OkpushButton, &QPushButton::click);
}

DeveloperModeDialog::~DeveloperModeDialog()
{
    delete ui;
}

void DeveloperModeDialog::mousePressEvent(QMouseEvent *event)
{
    // 检查鼠标事件是否为左键按下，并且鼠标位置是否在标题栏区域内
    if (event->button() == Qt::LeftButton &&
        titleBar->geometry().contains(event->pos())) {
        // 标记窗口正在被拖动
        isDragging = true;
        // 计算鼠标位置与窗口左上角的偏移量
        dragPosition = event->globalPos() - frameGeometry().topLeft();
        // 接受该事件，表示事件已被处理
        event->accept();
    } else {
        // 如果不是左键点击标题栏，则调用基类的鼠标按下事件处理函数
        QDialog::mousePressEvent(event);
    }
}

void DeveloperModeDialog::mouseMoveEvent(QMouseEvent *event)
{
    // 检查是否处于拖动状态 && 左键是否保持按下
    if (isDragging && (event->buttons() & Qt::LeftButton)) {
        // 计算并移动窗口到新位置
        move(event->globalPos() - dragPosition);
        // 标记事件已处理，阻止继续传播
        event->accept();
    } else {
        // 非拖动状态，调用基类默认处理
        QDialog::mouseMoveEvent(event);
    }
}

void DeveloperModeDialog::mouseReleaseEvent(QMouseEvent *event)
{
    isDragging = false;  // 重置拖动状态标志，标记拖动操作结束
    event->accept();     // 接受该事件，表明事件已被处理
}


void DeveloperModeDialog::on_ColseButton_clicked()
{
    reject(); // 关闭对话框并设置返回值为Rejected
}


void DeveloperModeDialog::on_OkpushButton_clicked()
{
    // 获取输入的密码
    QString password = ui->lineEdit->text();

    // 简单的验证逻辑（默认密码为"admin"）
    if (password == "admin")
    {
        // 验证成功
        accept();  // 关闭对话框并设置返回值为Accepted
    }
    else
    {
        // 清空密码输入框
        ui->lineEdit->clear();
        // 聚焦到密码输入框
        ui->lineEdit->setFocus();
        emit writeLog("开发者密码错误!",2,false);
    }
}


void DeveloperModeDialog::on_closeButton_clicked()
{
     reject();
}
